package claseArreglosMultidimensionales;

public class TrianguloDePascal {
	private int[][] trianguloPascal;
	
	public TrianguloDePascal(int altura) {
		this.trianguloPascal = new int[altura][];
		
		for(int ancho = 0; ancho < this.trianguloPascal.length; ancho ++){
			this.trianguloPascal[ancho] = new int[ancho + 1];
		}
		
		this.agregarCoeficientes();
	}

	public Object getAltura() {
		return this.trianguloPascal.length;
	}
	
	/**
	 * @Post: Calcula y agrega todos los coeficiente del triangulo.
	 * */
	private void agregarCoeficientes(){
		/*Agrego el valor "1" a la primer columna del triangulo*/
		for(int altura = 0; altura < this.trianguloPascal.length; altura++){
			this.trianguloPascal[altura][0] = 1;
		}
		/*Agrego el valor "1" al ultimo casillero de cada fila*/
		for(int altura = 1; altura < this.trianguloPascal.length; altura ++){
			int ancho = this.trianguloPascal[altura].length -1;
			this.trianguloPascal[altura][ancho] = 1;
		}
		/*Calculo el valor de los casilleros restantes.*/
		for(int altura = 2; altura < this.trianguloPascal.length; altura++){
			/*Omito pasar por el primer y ultimo casillero de cada fila ya que
			 * estan cargados con el valor "1"*/
			for(int ancho = 1; ancho < this.trianguloPascal[altura].length - 1; ancho++){
				int valorSuperiorIzquierdo = this.trianguloPascal[altura -1 ][ancho - 1];
				int valorSuperior = this.trianguloPascal[altura - 1][ancho];
				
				this.trianguloPascal[altura][ancho] = valorSuperiorIzquierdo + valorSuperior;
			}
		}
		
	}

	/**
	 * @post: Devuelve el valor del coeficiente pedido.
	 * */
	public Object getCoeficiente(int altura, int ancho) {
		return this.trianguloPascal[altura - 1][ancho - 1];
	}

}
